home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 9
/
PC World Interactive 9 - Temmuz 1998.iso
/
share
/
internet
/
hot
/
cgi.z
/
html_log.pl
< prev
next >
Wrap
Perl Script
|
1996-04-17
|
8KB
|
278 lines
#! /usr/local/bin/perl
# Access Stat HTML Generator
# Used in conjunction with Counter Script
# Created by Matt Wright mattw@misha.net
# Created on: 10/25/95 Last Modified on: 10/26/95
# Version 1.0
# The file STAT_README contains more information.
###################################################################
# Define Variables
$log_file = "/path/to/access_log";
$web = "1";
$min_refs = "5";
$min_remote = "15";
$min_agent = "5";
# Done
###################################################################
###################################################################
# Select Options
$expand_agent = 0; # 0 = NO; 1 = YES
$show_percent = 1; # 0 = NO; 1 = YES
$title = "Matt's Script Archive";
$title_url = "http://worldwidemart.com/scripts/";
# Done
###################################################################
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($mon < 10) { $monc = "0$mon"; }
if ($web == 1) {
print "Content-type: text/html\n\n";
}
$date_now = "$hour\:$min\:$sec $mon/$mday/$year";
open(DB,"$log_file") || die "Cannot Open Log File $log_file: $!";
@lines = <DB>;
close(DB);
$accesses = @lines;
if ($lines[1] =~ /\[(.*)\] (.*) - (.*) - (.*)/) {
$first_date = $1;
}
else {
$first_date = 0;
}
if ($lines[($accesses - 1)] =~ /\[(.*)\] (.*) - (.*) - (.*)/) {
$last_date = $1;
}
else {
$last_date = 0;
}
foreach $line (@lines) {
if ($line =~ /\[(.*)\] (.*) - (.*) - (.*)/) {
$date = $1;
($clock,$time,$day) = split(/ /,$date);
($hour,$minute,$second) = split(/:/,$clock);
$referer = $2;
$referer =~ s/\%24/\$/g;
$referer =~ s/\%7E/~/g;
$remote_host = $3;
$user_agent = $4;
if ($time eq 'PM') {
$hour += 12;
}
if ($day ne '' && $day ne ' ') {
push(@DAYS, $day);
}
if ($hour ne '' && $hour ne ' ') {
push(@HOURS, $hour);
}
if ($referer ne 'No Referer' && $referer ne ' ' && $referer ne '') {
push(@REFERER, $referer);
}
if ($remote_host ne 'No Remote_Host' && $remote_host ne ' ' && $remote_host ne '') {
push(@REMOTE_HOST, $remote_host);
}
if ($user_agent ne 'No User_Agent' && $user_agent ne ' ' && $user_agent ne '') {
push(@USER_AGENT, $user_agent);
}
}
}
foreach (@REFERER) {
$refs{($_)[0]}++;
$i++;
}
foreach (@REMOTE_HOST) {
$remote{($_)[0]}++;
$j++;
}
foreach (@USER_AGENT) {
if ($expand_agent == 1) {
$agent{($_)[0]}++;
}
else {
$agent{(split('/',$_))[0]}++;
}
$k++;
}
foreach (@DAYS) {
$day{($_)[0]}++;
}
foreach (@HOURS) {
$hour{($_)[0]}++;
}
&html_header;
sub html_header {
print "<html><head><title>Access Stats for $title</title></head>\n";
print "<body><center><h1>Access Stats for $title</h1></center>\n";
print "Below are the access stats for $title.<p>\n";
print "A total of $accesses were reviewed for this logging, which occurred at: $date_now<p>\n";
if ($first_date != 0 && $last_date != 0) {
print "These statistics reflect accesses from: <i>$first_date</i> to <i>$last_date</i><p>\n";
}
print "<p><hr size=7 width=75%>\n";
print "<font size=-1>[ <a href=\"\#refs\">Referring Web Pages</a> ] [ <a href=\"\#remote_host\">Remote Hosts</a> ] [ <a href=\"\#browsers\">Browsers</a> ] [ <a href=\"\#days\">Hits by Day</a> ] [ <a href=\"\#hours\">Hits by Hour</a> ] [ <a href=\"$titl
e_url\">$title</a> ]</font>\n";
print "<hr size=7 width=75%><p>\n";
&html_referer;
&html_remote_host;
&html_user_agent;
&days;
&hours;
}
sub html_referer {
print "<center><h2><a name=\"refs\">Referring Web Pages</a></h2></center>\n";
print "<b>Referring URLs Searched:</b> <i><u>$i</u></i><br>\n";
print "<b>Minimum References Required to Make List:</b> $min_refs</u></i><p>\n";
print "<table border width=100%>\n";
if ($show_percent == 1) {
print "<tr><th>Number </th><th>Percent </th><th>Referring Web Sites<br></th></tr>\n";
}
else {
print "<tr><th>Number </th><th>Referring Web Sites<br></th></tr>\n";
}
foreach (sort { $refs{$b} <=> $refs{$a} } keys %refs) {
if ($refs{$_} >= $min_refs) {
print "<tr>\n";
$total_refs += $refs{$_};
if ($show_percent == 1) {
$percent_refs = (int(10000 * ($refs{$_} / $i)) / 100);
$total_percent_refs += $percent_refs;
print "<th>$refs{$_} </th><th>$percent_refs\% </th><td><a href=\"$_\">$_</a><br></td>\n";
}
else {
print "<th>$refs{$_} </th><td><a href=\"$_\">$_</a><br></td>\n";
}
print "</tr>\n";
}
}
if ($show_percent == 1) {
print "<tr><th>$total_refs </th><th>$total_percent_refs\% </th><th>Totals For URLS Shown<br></th></tr>\n";
}
else {
print "<tr><th>$total_refs </th><th>Totals For URLS Shown<br></th></tr>\n";
}
print "</table><hr size=7 width=75%><p>\n";
}
sub html_remote_host {
print "<center><h2><a name=\"remote_host\">Remote Hosts</a></h2></center>\n";
print "<b>Remote Hosts Searched:</b> <u><i>$j</i></u><br>\n";
print "<b>Minimum Hits Required to Make List:</b> <i><u>$min_remote</u></i><p>\n";
print "<table border>\n";
if ($show_percent == 1) {
print "<tr><th>Number of Hits </th><th>Percent </th><th>Remote Hosts<br></th></tr>\n";
}
else {
print "<tr><th>Number of Hits </th><th>Remote Hosts<br></th></tr>\n";
}
foreach (sort { $remote{$b} <=> $remote{$a} } keys %remote) {
if ($remote{$_} >= $min_remote) {
print "<tr>\n";
if ($show_percent == 1) {
$percent_remote = (int(10000 * ($remote{$_} / $j)) / 100);
print "<th>$remote{$_} </th><th>$percent_remote\% </th><td>$_<br></td>\n";
}
else {
print "<th>$remote{$_} </th><td>$_<br></td>\n";
}
print "</tr>\n";
}
}
print "</table><hr size=7 width=75%><p>\n";
}
sub html_user_agent {
print "<a name=\"browsers\"><center><h2>WWW Browsers</h2></center></a>\n";
print "<b>Browsers Searched:</b> <u><i>$k</i></u><br>\n";
print "<b>Minimum Hits Required to Make List:</b> <u><i>$min_agent</i></u><p>\n";
print "<table border>\n";
if ($show_percent == 1) {
print "<tr><th>Number of Hits </th><th>Percent </th><th>Browser<br></th></tr>\n";
}
else {
print "<tr><th>Number of Hits </th><th>Browser<br></th></tr>\n";
}
foreach (sort { $agent{$b} <=> $agent{$a} } keys %agent) {
if ($agent{$_} >= $min_agent) {
print "<tr>\n";
if ($show_percent == 1) {
$percent_agent = (int(10000 * ($agent{$_} / $k)) / 100);
print "<th>$agent{$_} </th><th>$percent_agent\% </th><td>$_<br></td>\n";
}
else {
print "<th>$agent{$_} </th><td>$_<br></td>\n";
}
print "</tr>\n";
}
}
print "</table>\n";
}
sub hours {
print "<a name=\"hours\"><center><h2>Hits By Hour</h2></center></a>\n";
print "<table border>\n";
print "<tr><th>Hour </th><td>Number of Hits<br></td></tr>\n";
foreach (sort keys %hour) {
print "<tr>\n";
print "<th>$_ </th><td>$hour{$_}<br></td>\n";
print "</tr>\n";
}
print "</table>\n";
}
sub days {
print "<a name=\"days\"><center><h2>Hits By Day</h2></center></a>\n";
print "<table border>\n";
print "<tr><th>Day </th><td>Number of Hits<br></td></tr>\n";
foreach (sort keys %day) {
print "<tr>\n";
print "<th>$_ </th><td>$day{$_}<br></td>\n";
print "</tr>\n";
}
print "</table>\n";
}
sub html_trailer {
print "<p><hr size=7 width=75%>\n";
print "<font size=-1>[ <a href=\"\#refs\">Referring Web Pages</a> ] [ <a href=\"\#remote_host\">Remote Hosts</a> ] [ <a href=\"\#browsers\">Browsers</a> ] [ <a href=\"$title_url\">$title</a> ]</font>\n";
print "<hr size=7 width=75%><p>\n";
print "</body></html>\n";
}